#include <iostream>
#include <sstream>
#include <string>
#include <windows.h>
#include "Checks.h"

#include "Ruta.h"


using namespace std;

// Metodo Constructor

Ruta::Ruta(string ptoSalida,string ptoLlegada, string escalas)
{
    this->ptoSalida=ptoSalida;
    this->ptoLlegada=ptoLlegada;
    this->escalas=escalas;
}
Ruta::Ruta(string ptoSalida, string ptoLlegada, string escalas,int kilometros, Transporte* trans)
{
    this->ptoSalida=ptoSalida;
    this->ptoLlegada=ptoLlegada;
    this->escalas=escalas;
    this->kilometros = kilometros;
    transporte = trans;
}

Ruta::Ruta()
{
    this->ptoSalida="ninguno";
    this->ptoLlegada="ninguno";
    this->escalas="ninguno";
    this->kilometros=0;
    transporte = new Transporte();

}

Ruta::~Ruta()
{
    delete transporte;
}


//Metodos set y get
string Ruta::getPtoSalida()
{
    return ptoSalida;

}

void Ruta::setPtoSalida(string val)
{
    ptoSalida=val;
}

string Ruta::getPtoLlegada()
{
    return ptoLlegada;
}

void Ruta::setPtoLlegada(string val)
{
    ptoLlegada=val;
}

string Ruta::getEscalas()
{
    return escalas;
}

void Ruta::setEscalas(string val)
{
    escalas=val;
}

int Ruta::getKilometros()
{
    return kilometros;
}

void Ruta::setKilometros(int val)
{
    kilometros=val;
}

Transporte* Ruta::getTransporte()
{
    return transporte;
}

void Ruta::setTransporte(Transporte* val)
{
    transporte=val;
}



float Ruta::costoRuta()
{
    float aux=0;
    if(kilometros<=15)
        aux=10;
    else if(kilometros<=50)
        aux=30;
    else if(kilometros<=6000)
        aux=40;
    else if(kilometros<=11000)
        aux=70;
    else if(kilometros<=16000)
        aux=100;
    else
        aux=140;


    if(transporte->getMedioSelec() == "tierra")
        return aux;
    else if(transporte->getMedioSelec() == "mar")
        return aux+(aux*0.15);
    else
        return aux+(aux*0.15)+(aux*0.25);
}

void Ruta::menuDestino()
{
    int val=0;
    int aux=0;
    int destInt=0;


    while (val<=2)
    {
        system("cls");
        cout<<"Presione 1 para envio nacional"<<endl;
        cout<<"Presione 2 para envio internacional"<<endl;
        char check[1];
        cin>>check;
        val = compruebaInt(check);
        if(val==1)
        {
            val=3;
            cout<<"Presione 1 si el destino de su envio es San Jose, Cartago, Alajuela o Heredia\n"<<endl;
            cout<<"Presione 2 si es Limon o Puntarenas y 3 si es Guanacaste"<<endl;
            char check2[1];
            cin>>check2;
            aux = compruebaInt(check2);
            switch(aux)
            {
                case 1:
                    kilometros=15;
                    break;
                case 2:
                    kilometros=50;
                    break;
                case 3:
                    kilometros=150;
                    break;
                default:
                    cout<<"Este numero es incorrecto"<<endl;
            }
        }
        else if(val==2)
        {
            val=3;
            cout<<"Presione 1 si su destino internacional esta en America, 2 si se ubica en Europa o Africa, 3 si es Asia o 4 si el destino es Oceania"<<endl;
            char check3[1];
            cin>>check3;
            destInt = compruebaInt(check3);

            switch(destInt)
            {
                case 1:
                    kilometros=6000;
                    break;
                case 2:
                    kilometros=11000;
                    break;
                case 3:
                    kilometros=16000;
                    break;
                case 4:
                    kilometros=18000;
                    break;
                default:
                    cout<<"Este numero es incorrecto"<<endl;
            }
        }
        else
        {
            cout<<"Este numero es incorrecto, por favor vuelva a realizar el procedimiento"<<endl;
            val=0;
        }
    }
}
void Ruta::selecRuta()
{
    menuDestino();
    cout<<"Punto de llegada: ";
    cin>>ptoLlegada;
    cout<<"Punto de salida: ";
    cin>>ptoSalida;
    cout<<"Escala: ";
    cin>>escalas;
    transporte->escogerTransporte();

}

/*string Ruta::toString()
{
    stringstream s;
    s<<"Punto de salida: "<<ptoSalida<<endl
    <<"Punto de llegada: "<<ptoLlegada<<endl
    <<"Escalas: "<<escalas<<endl
    <<"Kilometros: "<<kilometros<<endl
    <<"Costo de la ruta: "<<costoRuta()<<endl;

    return s.str();
}
*/
void Ruta::mostrarRuta()
{
    //cout<<toString()<<endl;
    cout<<"Punto de salida: "<<ptoSalida<<endl;
    cout<<"Punto de llegada: "<<ptoLlegada<<endl;
    cout<<"Escalas: "<<escalas<<endl;
    cout<<"Kilometros: "<<kilometros<<endl;
    //cout<<"Costo de la ruta: "<<costoRuta()<<endl;;
    transporte->mostrarTransporte();
}
